import request from '@/utils/request'

/**
 * 流程管理API接口
 */

/**
 * 分页查询流程列表
 * @param {Object} params - 查询参数
 * @param {string} params.flowCode - 流程编码
 * @param {string} params.flowName - 流程名称
 * @param {string} params.category - 分类
 * @param {number} params.status - 状态
 * @param {number} params.current - 页码
 * @param {number} params.size - 每页大小
 * @returns {Promise} 流程列表数据
 */
export const getFlowPage = (params) => {
  return request({
    url: '/flow-definitions/page',
    method: 'get',
    params
  })
}

/**
 * 获取所有启用的流程
 * @returns {Promise} 流程列表数据
 */
export const getAllEnabledFlows = () => {
  return request({
    url: '/flow-definitions/enabled',
    method: 'get'
  })
}

/**
 * 根据ID获取流程详情
 * @param {number} id - 流程ID
 * @returns {Promise} 流程详情数据
 */
export const getFlowById = (id) => {
  return request({
    url: `/flow-definitions/${id}`,
    method: 'get'
  })
}

/**
 * 根据流程编码获取流程详情
 * @param {string} flowCode - 流程编码
 * @returns {Promise} 流程详情数据
 */
export const getFlowByCode = (flowCode) => {
  return request({
    url: `/flow-definitions/code/${flowCode}`,
    method: 'get'
  })
}

/**
 * 新增流程
 * @param {Object} data - 流程数据
 * @param {string} data.flowCode - 流程编码
 * @param {string} data.flowName - 流程名称
 * @param {string} data.category - 分类
 * @param {string} data.version - 版本
 * @param {string} data.applicationName - 应用名称
 * @param {string} data.description - 描述
 * @param {Object} data.flowData - 流程图数据
 * @returns {Promise} 操作结果
 */
export const createFlow = (data) => {
  return request({
    url: '/flow-definitions',
    method: 'post',
    data
  })
}

/**
 * 更新流程
 * @param {number} id - 流程ID
 * @param {Object} data - 流程数据
 * @param {string} data.flowName - 流程名称
 * @param {string} data.category - 分类
 * @param {string} data.version - 版本
 * @param {string} data.applicationName - 应用名称
 * @param {string} data.description - 描述
 * @param {Object} data.flowData - 流程图数据
 * @returns {Promise} 操作结果
 */
export const updateFlow = (id, data) => {
  return request({
    url: `/flow-definitions/${id}`,
    method: 'put',
    data
  })
}

/**
 * 保存流程设计数据
 * @param {number} id - 流程ID
 * @param {Object} flowData - 流程图数据
 * @returns {Promise} 操作结果
 */
export const saveFlowDesign = (id, flowData) => {
  return request({
    url: `/flow-definitions/${id}/design`,
    method: 'put',
    data: { flowData }
  })
}

/**
 * 更新流程状态
 * @param {number} id - 流程ID
 * @param {Object} data - 状态数据
 * @param {number} data.status - 状态
 * @returns {Promise} 操作结果
 */
export const updateFlowStatus = (id, data) => {
  return request({
    url: `/flow-definitions/${id}/status`,
    method: 'put',
    data
  })
}

/**
 * 删除流程
 * @param {number} id - 流程ID
 * @returns {Promise} 操作结果
 */
export const deleteFlow = (id) => {
  return request({
    url: `/flow-definitions/${id}`,
    method: 'delete'
  })
}

/**
 * 复制流程
 * @param {number} id - 流程ID
 * @param {Object} data - 复制数据
 * @param {string} data.newFlowCode - 新流程编码
 * @returns {Promise} 操作结果
 */
export const copyFlow = (id, data) => {
  return request({
    url: `/flow-definitions/${id}/copy`,
    method: 'post',
    data
  })
}

/**
 * 发布流程
 * @param {number} id - 流程ID
 * @returns {Promise} 操作结果
 */
export const publishFlow = (id) => {
  return request({
    url: `/flow-definitions/${id}/publish`,
    method: 'post'
  })
}

/**
 * 下线流程
 * @param {number} id - 流程ID
 * @returns {Promise} 操作结果
 */
export const unpublishFlow = (id) => {
  return request({
    url: `/flow-definitions/${id}/unpublish`,
    method: 'post'
  })
}

/**
 * 验证流程
 * @param {Object} flowData - 流程图数据
 * @returns {Promise} 验证结果
 */
export const validateFlow = (flowData) => {
  return request({
    url: '/flow-definitions/validate',
    method: 'post',
    data: { flowData }
  })
}

/**
 * 执行流程
 * @param {Object} data - 执行数据
 * @param {string} data.flowCode - 流程编码
 * @param {boolean} data.async - 是否异步执行
 * @param {Object} data.inputData - 输入参数
 * @returns {Promise} 执行结果
 */
export const executeFlow = (data) => {
  return request({
    url: '/flow-definitions/execute',
    method: 'post',
    data
  })
}

/**
 * 转换流程为LiteFlow规则
 * @param {number} id - 流程ID
 * @returns {Promise} 转换结果
 */
export const convertToLiteFlow = (id) => {
  return request({
    url: `/flow-definitions/${id}/convert`,
    method: 'post'
  })
}

/**
 * 预览LiteFlow规则
 * @param {Object} logicFlowData - LogicFlow数据对象
 * @returns {Promise} 预览结果
 */
export const previewLiteFlow = (logicFlowData) => {
  return request({
    url: '/flow-definitions/preview-liteflow',
    method: 'post',
    data: logicFlowData
  })
}